Kernel - userspace interface露
The following diagram shows how a filesystem operation (in this
example unlink) is performed in FUSE.
| "rm /mnt/fuse/file" | FUSE filesystem daemon
| |
| | >sys_read()
| | >fuse_dev_read()
| | >request_wait()
| | [sleep on fc->waitq]
| |
| >sys_unlink() |
| >fuse_unlink() |
| [get request from |
| fc->unused_list] |
| >request_send() |
| [queue req on fc->pending] |
| [wake up fc->waitq] | [woken up]
| >request_wait_answer() |
| [sleep on req->waitq] |
| | pending]
| | [copy req to read buffer]
| | [add req to fc->processing]
| | fuse_dev_write()
| | [look up req in fc->processing]
| | [remove from fc->processing]
| | [copy write buffer to req]
| [woken up] | [wake up req->waitq]
| | locked' flag indicates when the copy is
taking place, and abort is delayed until this flag is unset.
|